Background threshold voltage shifting using base and delta threshold voltage shift values in non-volatile memory

ABSTRACT

A computer program product according to one embodiment includes a computer readable storage medium having program instructions embodied therewith. The program instructions are executable by a processing circuit to cause the circuitry to perform a method including determining, after writing data to a non-volatile memory block, one or more delta threshold voltage shift (TVS Δ ) values. One or more overall threshold voltage shift values for the data written to the non-volatile memory block are calculated, the values being a function of the one or more TVS Δ  values to be used when writing data to the non-volatile memory block. The overall threshold voltage shift values are stored. A base threshold voltage shift (TVS BASE ) value, the one or more TVS Δ  values, or both the TVS BASE  value and the one or more TVS Δ  values are re-calibrated during a background health check after a predetermined number of background health checks without calibration are performed.

BACKGROUND

The present invention relates to Flash memory, and more particularly,this invention relates to background threshold voltage shifting usingbase and delta threshold voltage shift values in Flash memory.

The residual bit error rate (RBER) of a Flash memory block willtypically increase over time due to additional program and erasecycling, charge leakage from retention, and additional charge placed inthe cells by read operations (i.e., read disturb errors). Typically, aFlash memory block is retired when any page in the block exhibits a codeword that reaches a page retirement error count limit. This limit istypically set to be achieved in conjunction with an appropriate errorcorrection code (ECC), with the RBER for a Flash memory block being setto be similar to the RBER in traditional hard disk drives, e.g., ataround 10×10⁻¹⁵, but may be more or less.

Threshold voltage shifting, also known as block calibration, has beenshown to be a key contributor to enhance endurance and retention forenterprise-level Flash memory systems using 19 nm and sub-19 nm NANDFlash memory. Preferably, the optimal threshold voltage shift values aredetermined shortly after a Flash memory block has been written.Unfortunately, this is not possible under a sustained heavy writeworkload without impacting data path performance. After initial writing,the threshold voltage shift values should be updated periodically aslong as data remains on the Flash memory blocks. However, this wouldrequire significant additional read workload and data processing forevery Flash memory block written, which is not acceptable in a Flashmemory system.

Therefore, block calibration must be executed fully in the backgroundand not in the data path. Executing Flash memory block calibration inthis way, however, may result in some Flash memory blocks not beingaccurately calibrated. Those Flash memory blocks will exhibit asignificantly higher RBER, which may result in unnecessary uncorrectableread errors or early and unwarranted Flash memory block retirement.

SUMMARY

A computer program product according to one embodiment includes acomputer readable storage medium having program instructions embodiedtherewith. The computer readable storage medium is not a transitorysignal per se. The program instructions are executable by a processingcircuit to cause the processing circuit to perform a method includingdetermining, by the processing circuit, after writing data to anon-volatile memory block, one or more delta threshold voltage shift(TVS_(Δ)) values configured to track temporary changes with respect tochanges in the underlying threshold voltage distributions due toretention and/or read disturb errors. One or more overall thresholdvoltage shift values for the data written to the non-volatile memoryblock are calculated by the processing circuit. The one or more overallthreshold voltage shift values are a function of the one or more TVS_(Δ)values to be used when writing data to the non-volatile memory block.The one or more overall threshold voltage shift values are stored by theprocessing circuit. A base threshold voltage shift (TVS_(BASE)) value,the one or more TVS_(Δ) values, or both the base threshold voltage shift(TVS_(BASE)) value and the one or more TVS_(Δ) values are re-calibratedby the processing circuit, during a background health check after apredetermined number of background health checks without calibration areperformed.

A computer program product according to another embodiment includes acomputer readable storage medium having program instructions embodiedtherewith. The computer readable storage medium is not a transitorysignal per se. The program instructions are executable by a processingcircuit to cause the processing circuit to perform a method includingdetermining, by the processing circuit, after writing data to anon-volatile memory block, one or more base threshold voltage shift(TVS_(BASE)) values configured to track permanent changes in underlyingthreshold voltage distributions due to cycling of the non-volatilememory block. An overall threshold voltage shift value for the datawritten to the non-volatile memory block is calculated by the processingcircuit. The overall threshold voltage shift value is a function of theone or more TVS_(BASE) values. The overall threshold voltage shift valueis stored by the processing circuit.

A computer-implemented method for managing threshold voltage shifts innon-volatile memory according to yet another embodiment includescalculating an overall threshold voltage shift value for data written toa non-volatile memory block. The overall threshold voltage shift valueis a function of a base threshold voltage shift (TVS_(BASE)) value anddelta threshold voltage shift (TVS_(Δ)) value to be used when writingdata to the non-volatile memory block. The TVS_(BASE) value represents apermanent change in underlying threshold voltage distributions due tocycling of the non-volatile memory block. The TVS_(Δ) value represents atemporary change with respect to a change in the underlying thresholdvoltage distributions due to retention and/or read disturb errors. Theoverall threshold voltage shift value is applied to a read operation ofthe data stored to the non-volatile memory block upon receiving a readrequest.

Other aspects and embodiments of the present invention will becomeapparent from the following detailed description, which, when taken inconjunction with the drawings, illustrate by way of example theprinciples of the invention.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

FIG. 1 illustrates a network architecture, in accordance with oneembodiment.

FIG. 2 shows a representative hardware environment of a processor systemthat may be associated with the servers and/or clients of FIG. 1, inaccordance with one embodiment.

FIG. 3 shows a data storage system architecture in one embodiment.

FIG. 4 shows a Flash memory card according to one embodiment.

FIG. 5 is a chart showing tracking threshold voltage levels, accordingto one embodiment.

FIG. 6 shows a flowchart of a method for performing a background healthcheck, according to one embodiment.

FIG. 7 shows a flowchart of a method for calibrating a background healthcheck, according to one embodiment.

FIG. 8 shows a flowchart of a method for calibrating a background healthcheck, according to another embodiment.

FIG. 9 shows a flowchart of a method for calibrating a background healthcheck, according to yet another embodiment.

FIG. 10 shows a flowchart of a method, according to one embodiment.

DETAILED DESCRIPTION

The following description is made for the purpose of illustrating thegeneral principles of the present invention and is not meant to limitthe inventive concepts claimed herein. Further, particular featuresdescribed herein can be used in combination with other describedfeatures in each of the various possible combinations and permutations.

Unless otherwise specifically defined herein, all terms are to be giventheir broadest possible interpretation including meanings implied fromthe specification as well as meanings understood by those skilled in theart and/or as defined in dictionaries, treatises, etc.

It must also be noted that, as used in the specification and theappended claims, the singular forms “a,” “an,” and “the” include pluralreferents unless otherwise specified.

According to one embodiment, the threshold voltage shift values may beseparated into two components: 1) a base threshold voltage shift whichtracks permanent changes in the underlying threshold voltagedistributions due to cycling, and 2) delta threshold voltage shiftvalues which adapt to temporary changes in the underlying thresholdvoltage distributions due to retention and/or read disturb errors.

The base and delta threshold voltage shift values may be adaptedindependent from each other in some cases and may be adaptedsimultaneously with one another in other cases. Upon block calibration,additional information may be used to decide whether the base and deltathreshold voltage shift values should be updated or reset.

In one general embodiment, an apparatus includes a Flash memory blockconfigured to store data and a processor and logic integrated withand/or executable by the processor, the logic being configured to:determine, after writing data to the Flash memory block, one or morebase threshold voltage shift (TVS_(BASE)) values configured to trackpermanent changes in underlying threshold voltage distributions due tocycling of the Flash memory block, determine, after the writing of datato the Flash memory block, one or more delta threshold voltage shift(TVS_(Δ)) values configured to track temporary changes with respect tochanges in the underlying threshold voltage distributions due toretention and/or read disturb errors, calculate one or more overallthreshold voltage shift values for the data written to the Flash memoryblock, the one or more overall threshold voltage shift values being afunction of the one or more TVS_(BASE) values and the one or moreTVS_(Δ) values to be used when writing data to the Flash memory block,and apply the one or more overall threshold voltage shift values to aread operation of the data stored to the Flash memory block uponreceiving a read request.

In another general embodiment, a method for managing threshold voltageshifts in Flash memory includes determining, by a processor afterwriting data to a Flash memory block, one or more TVS_(BASE) valuesconfigured to track permanent changes in underlying threshold voltagedistributions due to cycling of the Flash memory block, determining, bythe processor after the writing of data to the Flash memory block, oneor more TVS_(Δ) values configured to track temporary changes, withrespect to changes in the underlying threshold voltage distributions dueto retention and/or read disturb errors, calculating by the processor anoverall threshold voltage shift value for the data written to the Flashmemory block, the overall threshold voltage shift value being a functionof the one or more TVS_(BASE) values and the one or more TVS_(Δ) valuesto be used when writing data to the Flash memory block, and applying bythe processor the overall threshold voltage shift value to a readoperation of the data stored to the Flash memory block upon receiving aread request.

According to another general embodiment, a computer program product formanaging threshold voltage shifts in Flash memory includes a computerreadable storage medium having program instructions embodied therewith,the program instructions being readable and/or executable by a processorto cause the processor to: determine, by the processor after writingdata to a Flash memory block, one or more TVS_(BASE) values configuredto track permanent changes in underlying threshold voltage distributionsdue to cycling of the Flash memory block, determine, by the processorafter the writing of data to the Flash memory block, one or more TVS_(Δ)values configured to track temporary changes with respect to changes inthe underlying threshold voltage distributions due to retention and/orread disturb errors, calculate, by the processor, an overall thresholdvoltage shift value for the data written to the Flash memory block, theoverall threshold voltage shift value being a function of the TVS_(BASE)value and the TVS_(Δ) value to be used when writing data to the Flashmemory block, and apply, by the processor, the overall threshold voltageshift value to a read operation of the data stored to the Flash memoryblock upon receiving a read request.

FIG. 1 illustrates a network architecture 100, in accordance with oneembodiment. As shown in FIG. 1, a plurality of remote networks 102 areprovided including a first remote network 104 and a second remotenetwork 106. A gateway 101 may be coupled between the remote networks102 and a proximate network 108. In the context of the present networkarchitecture 100, the networks 104, 106 may each take any formincluding, but not limited to a LAN, a WAN such as the Internet, publicswitched telephone network (PSTN), internal telephone network, etc.

In use, the gateway 101 serves as an entrance point from the remotenetworks 102 to the proximate network 108. As such, the gateway 101 mayfunction as a router, which is capable of directing a given packet ofdata that arrives at the gateway 101, and a switch, which furnishes theactual path in and out of the gateway 101 for a given packet.

Further included is at least one data server 114 coupled to theproximate network 108, and which is accessible from the remote networks102 via the gateway 101. It should be noted that the data server(s) 114may include any type of computing device/groupware. Coupled to each dataserver 114 is a plurality of user devices 116. Such user devices 116 mayinclude a desktop computer, laptop computer, handheld computer, printer,and/or any other type of logic-containing device. It should be notedthat a user device 111 may also be directly coupled to any of thenetworks, in some embodiments.

A peripheral 120 or series of peripherals 120, e.g., facsimile machines,printers, scanners, hard disk drives, networked and/or local datastorage units or systems, etc., may be coupled to one or more of thenetworks 104, 106, 108. It should be noted that databases and/oradditional components may be utilized with, or integrated into, any typeof network element coupled to the networks 104, 106, 108. In the contextof the present description, a network element may refer to any componentof a network.

According to some approaches, methods and systems described herein maybe implemented with and/or on virtual systems and/or systems whichemulate one or more other systems, such as a UNIX system which emulatesan IBM z/OS environment, a UNIX system which virtually hosts a MICROSOFTWINDOWS environment, a MICROSOFT WINDOWS system which emulates an IBMz/OS environment, etc. This virtualization and/or emulation may beenhanced through the use of VMWARE software, in some embodiments.

In more approaches, one or more networks 104, 106, 108, may represent acluster of systems commonly referred to as a “cloud.” In cloudcomputing, shared resources, such as processing power, peripherals,software, data, servers, etc., are provided to any system in the cloudin an on-demand relationship, thereby allowing access and distributionof services across many computing systems. Cloud computing typicallyinvolves an Internet connection between the systems operating in thecloud, but other techniques of connecting the systems may also be used,as known in the art.

FIG. 2 shows a representative hardware environment associated with auser device 116 and/or server 114 of FIG. 1, in accordance with oneembodiment. FIG. 2 illustrates a typical hardware configuration of aprocessor system 200 having a central processing unit 210, such as amicroprocessor, and a number of other units interconnected via a systembus 212, according to one embodiment.

The processor system 200 shown in FIG. 2 includes a Random Access Memory(RAM) 214, Read Only Memory (ROM) 216, an I/O adapter 218 for connectingperipheral devices such as storage subsystem 220 to the bus 212, a userinterface adapter 222 for connecting a keyboard 224, a mouse 226, aspeaker 228, a microphone 232, and/or other user interface devices suchas a touch screen, a digital camera (not shown), etc., to the bus 212,communication adapter 234 for connecting the processor system 200 to acommunication network 235 (e.g., a data processing network) and adisplay adapter 236 for connecting the bus 212 to a display device 238.

The processor system 200 may have resident thereon an operating systemsuch as the MICROSOFT WINDOWS Operating System (OS), a MAC OS, a UNIXOS, etc. It will be appreciated that a preferred embodiment may also beimplemented on platforms and operating systems other than thosementioned. A preferred embodiment may be written using JAVA, XML, C,and/or C++ language, or other programming languages, along with anobject oriented programming methodology. Object oriented programming(OOP), which has become increasingly used to develop complexapplications, may be used.

Now referring to FIG. 3, a data storage system 220 architecture is shownaccording to one embodiment. The data storage system 220 comprises anumber of interface cards 302 configured to communicate via I/Ointerconnections 304 to one or more processor systems 200. The datastorage system 220 may also comprise one or more RAID controllers 306configured to control data storage in a plurality of non-volatile datastorage cards 308. The non-volatile data storage cards 308 may compriseFlash memory cards, RAM, ROM, and/or some other known type ofnon-volatile memory.

The I/O interconnections 304 may include any known communicationprotocols, such as Fiber Channel (FC), FC over Ethernet (FCoE),Infiniband, Internet Small Computer System Interface (iSCSI), TransportControl Protocol/Internet Protocol (TCP/IP), Peripheral ComponentInterconnect Express (PCIe), etc., and/or any combination thereof.

The RAID controller(s) 306 in the data storage system 220 may perform aparity scheme similar to that employed by RAID-5, RAID-10, or some othersuitable parity scheme, as would be understood by one of skill in theart upon reading the present descriptions.

Each processor system 200 comprises one or more processors 210 (such asCPUs, microprocessors, etc.), local data storage 310 (such as RAM 214,ROM 216, etc.), and an I/O adapter 218 configured to communicate withthe data storage system 220.

In FIG. 4, a Flash card 400 is shown as an exemplary non-volatile datastorage card according to one embodiment. Although other types ofnon-volatile data storage cards may be used in a data storage system,the Flash card 400 is shown as a non-limiting example. Each Flash card400 comprises a gateway 402, a general purpose processor (GPP) 412 (suchas an ASIC, FPGA, CPU, etc.) connected to a GPP memory 414 (which maycomprise RAM, ROM, battery-backed DRAM, phase-change memory PC-RAM,MRAM, STT-MRAM, etc., or a combination thereof), and a number of Flashcontrollers 408. Each Flash controller 408 is connected to a pluralityof Flash memory modules 404 (which may comprise NAND Flash or some othersuitable Flash type known in the art) and a Flash controller memory 410(which may be battery-backed DRAM, phase-change memory PC-RAM, MRAM,STT-MRAM, etc., or a combination thereof).

The Flash controllers 408 internally perform a parity scheme (similar tosome RAID implementation such as RAID-5, RAID-10, etc.) to protectagainst chip/plane failures. In this parity scheme, erased Flash blocksfrom different channels are grouped together into a block stripe. Thisblock stripe then builds a garbage collection unit. Garbage collectionselects a block stripe according to a certain predetermined strategy andrelocates all still valid data. Once all still valid data has beenrelocated, all blocks in the block stripe designated as garbage may beerased and put back into a pool of erased blocks from which new blockstripes may be built later.

FIG. 5 shows a chart depicting typical behavior of the residual biterror rate (RBER) of a Flash memory block as a function of cycling anddata retention. During data retention, optimal levels slowly shift backtoward nominal levels. Using other threshold voltage shift algorithmsknown in the art, the levels are tracked as they shift downward,updating metadata accordingly.

Immediately after the Flash memory block is erased and re-programmed,the optimal levels suddenly shift back to close to levels present beforethe data retention and tracked levels in metadata are still close tonominal levels.

Until the Flash memory block is calibrated again, nominal performance isachieved and hence a higher RBER. In a worst case, the ECC correctioncapability may have already been exceeded.

When reading a NAND Flash page, one or more threshold voltage shift(TVS) values may be applied. Typically, the number of applicable TVSvalues depends on the number of bits stored in a single Flash cell andmay be Flash chip vendor specific. For instance, Single Level Cell (SLC)may support a single TVS value, Multi-Level Cell (MLC) may store twobits per cell, three TVS values, or more. In one embodiment, eachthreshold voltage shift (TVS) value may be split into two parts, aTVS_(BASE) which is configured to store the base threshold voltage shiftvalue, and a TVS_(Δ) which is configured to store one or more deltathreshold voltage shift values. In this way, −ΔV=TVS_(BASE)+TVS_(Δ).These TVS values are tracked on a per page, per page group, or per blockbasis.

Optimally, every page in a Flash memory block may have its own TVSvalues. However, to reduce the amount of metadata used to store the TVSvalues, physical Flash pages which typically have similar TVS values maybe grouped together in one embodiment. In a preferred embodiment, theTVS values may be tracked on a per page group basis, where pages aregrouped according to Flash characterization data and/or known internalarchitecture of NAND Flash blocks. This approach exhibits a superiorperformance and metadata overhead tradeoff. Note that the number of pagegroups and which page belongs to which group may be fixed for aparticular NAND Flash device type. Also, the number of pages in eachpage group may vary from group to group depending on the device type.Alternatively, TVS_(BASE) values may be used per page group, and theTVS_(Δ) values may be used per Flash memory block to further restrictresource usage, in one embodiment.

The threshold voltage shift values TVS_(BASE) and TVS_(Δ) may be storedin the Flash controller memory (which may be DRAM) or some othersuitable memory type known in the art.

The grouping of pages into TVS page groups may be performed based oncharacterization data and/or the known internal architecture of NANDFlash blocks and may further be fixed for a particular Flash type. Inone embodiment, a controller may support up to 16 page groups or more,with each page group holding up to 16 physical Flash pages, or more,with each Flash block size being 256 pages, or more or less.

When TVS_(BASE) and the TVS_(Δ) values are tracked per page group, eachpage group may include 3×14-bit shift values, or more or less, invarious other approaches. The 14-bit values may be split into a 7-bitTVS_(BASE) value and a 7-bit TVS_(Δ) value in one embodiment. In anotherembodiment, which further reduces the amount of meta-data, only 3×9 bitsper page group are used to store the shift values. The 9-bit values maythen be split into a 5-bit TVS_(BASE) value and a 4-bit TVS_(Δ) value.

In another embodiment, an amount of metadata per Flash memory block mayinclude 16 page groups with either a 3×7-bit shift value per page group,or a 2×7-bit shift value per page group. Of course, other sizes of shiftvalues may be used per page group, and more or less than 16 page groupsmay be included, in various other approaches. The 7-bit shift value maybe split into: a 4-bit base shift value (TVS_(BASE)), and a 3-bit deltashift value (TVS_(Δ)). The read voltage shift values to be configured inthe Flash chip prior to a read operation might be Flash chip vendorspecific. In one embodiment, it may be a 7-bit signed integer value. Inorder to scale the limited range of TVS_(BASE) and TVS_(Δ) values tocover a range of read voltage shift values that are configured in theFlash chips, a mapping from the value of the base/delta shifts to theactual read voltages shifts may be used. One exemplary mapping is shownin Table 1, below.

TABLE 1 TVS_(BASE) Base Mapping TVS_(Δ) ΔMapping 0000 −12 000 −15 0001−9 001 −12 0010 −6 010 −9 0011 −3 011 −6 0100 0 100 −3 0101 +3 101 00110 +6 110 +3 0111 +9 111 +6 1000 +12 1001 +15 1010 +18 1011 +21 1100+24 1101 +27 1110 +30 1111 +33

Furthermore, a few extra bits (2-3 bits) may be included in the shiftvalues to allow for expanded representation of values, in furtherapproaches. Of course, the values for the mapping may be different thanthose shown in the exemplary mapping of Table 1, as would be understoodby one of skill in the art.

Flash cards typically check the health of its Flash memory periodicallyby a background health checker which performs health check functions,such as read scrubbing, to determine if data is still readable, andblock calibration to determine optimal TVS values. The background healthchecker traverses the entire occupied Flash space within a well-definedtime interval. Full calibration is not required to be executed on everybackground health check iteration when using the method to update TVSvalues described herein. To reduce the read workload, calibration may beonly executed every 2-3 background health check runs (which equates toapproximately every 1-3 weeks), unless a block is marked explicitly fora required calibration, by a user or during an automated process whichdetects some condition that indicates calibration is required.

The calibration process requires each physical Flash page to be read 3times, or more or less, with different TVS values used in each read.Based on results of the read operations, new TVS values may be chosenand a number of errors for optimal values may be output and/or returned.

Optimally, calibration of the TVS_(BASE) value is performed shortlyafter the Flash memory block has been written and has only experienced asmall number of reads. By shortly, what is meant is within a reasonableamount of time after the writing, without interfering with normaloperation of the Flash memory block, such as reads and writes.Therefore, if the calibration may be performed immediately after thewriting when the programmed values have reached a stable state, then itis. Otherwise, it is performed at a first available time after thewriting without interrupting normal operations. In this way, thecalibration process does not affect system performance in any way.Therefore, calibration may be executed as part of the background healthcheck process.

Now referring to FIG. 6, a method 600 is shown for executing abackground health check according to one embodiment. In operation 602, afirst block stripe is picked from block stripes stored to Flash memory.Any block stripe may be chosen, and the determination as to which blockstripe to choose may be based on any factor or considerations, such asorder, name, etc.

In operation 604, it is determined whether the block stripe holds data.Any method of making such a determination known in the art may be used.When the block stripe holds data, method 600 continues to operation 606;otherwise, method 600 jumps to operation 620.

In operation 606, a first block in the block stripe is picked. Anymethod to pick a first block known in the art may be used, and thepicking may be based on any factor, such as order, name, etc.

In operation 608, a first page group in the block is picked. Any methodto pick a first page group known in the art may be used, and the pickingmay be based on any factor, such as order, name, contents, etc.

In operation 610, the page group is calibrated in the block, using anycalibration technique described herein, in various embodiments (such asthose in FIGS. 7-9) and others not specifically described herein butknown in the art. At the beginning of the lifetime of a data storagesystem, page groups will not yet be calibrated. It will be understood bythose skilled in the art that nominal TVS values may be used, i.e.,TVS_(BASE) may be set to the nominal TVS value and TVS_(Δ) may be set tozero.

With continued reference to FIG. 6, in operation 612, it is determinedwhether all page groups in the block have been calibrated. Any method ofmaking such a determination known in the art may be used. When all pagegroups in the block have been calibrated, method 600 continues tooperation 614; otherwise, method 600 returns to operation 616 where anext page group from the block is picked.

In operation 614, it is determined whether all blocks in the blockstripe have been completed (e.g., all page groups within all blocks ofthe block stripe have been calibrated). Any method of making such adetermination known in the art may be used. When all blocks in the blockstripe have been completed, method 600 continues to operation 620;otherwise, method 600 returns to operation 618 to pick a next block inthe block stripe. Any technique for picking a next block may be used asknown in the art, and may be based on order, name, contents, etc.

In operation 620, it is determined whether all block stripes have beencompleted (e.g., all page groups within all blocks within all blockstripes have been calibrated). Any method of making such a determinationknown in the art may be used. When all block stripes have beencompleted, method 600 ends; otherwise, method 600 returns to operation622 to pick a next block stripe. Any technique for picking a next blockstripe may be used as known in the art, and may be based on order, name,contents, etc. As with the other logical flowcharts presented herein,operations are presented in logical rather than strictly chronologicalorder, and in some embodiments, operations may be performed in adifferent order than presented, or concurrently. For instance,processing of a page group index may be performed concurrently in allblocks of the block stripe.

Referring again to FIG. 4, there are three input variables that may beused to determine how the threshold voltage shift values are calibrated:

-   -   1) Sweep counter—a value which indicates a number of background        health check sweeps a Flash memory block stripe has experienced        since it has last been built. This value may be maintained per        block stripe in the GPP memory 414, a DRAM memory, or some other        suitable memory type known in the art attached to the GPP 412 of        the Flash card 400.    -   2) Read disturb count—a value which indicates, on a per-block or        per-page group basis, a number of times a Flash memory block or        page group has been read. This value may be stored in the block        parameter table in the Flash controller memory 410, a DRAM        memory, or some other suitable memory type known in the art        attached to the Flash controller 408.    -   3) PE_(LC)—a value which indicates the program erase (P/E) cycle        count of the Flash memory block since a last calibration. This        value may be stored in the block parameter table in the Flash        controller memory 410.

Table 2, below, shows how TVS_(BASE) and TVS_(Δ) may be updated duringblock calibration based on the read disturb count, the sweep count, andthe P/E cycle count. These embodiments are also described in FIGS. 7-9.

TABLE 2 Read Count Sweep Count Low High 0 Calibrate TVS_(BASE), PE_(LC)< 500: Reset TVS_(Δ) Calibrate TVS_(Δ) PE_(LC) ≥ 500: CalibrateTVS_(BASE) and TVS_(Δ) -- or -- Calibrate TVS_(Δ) only and mark blockfor later calibration >0 Calibrate TVS_(Δ) Calibrate TVS_(Δ)

The TVS_(Δ) may be reset upon a Flash memory block erasure, whereas theTVS_(BASE) may remain untouched upon a Flash memory block erasureoperation. Clearly, in a first approximation, a calculation may be basedon the sweep count value of a Flash memory block, SWP(blk), in thefollowing manner:

-   -   1) When SWP(blk)>0: perturb TVS_(Δ)±ε and update metadata        accordingly;    -   2) When SWP(blk)=0: perturb TVS_(BASE)±ε and update metadata        accordingly.

This calibration is described in FIG. 7 in more detail, according to oneembodiment. With reference to FIG. 7, a method 700 is shown forcalibrating a page group according to one embodiment. In operation 702,current TVS value(s) are read in the Flash controller memory. Any numberof TVS values may be read, when more than one is stored, with each TVSvalue possibly having a different function and/or association with adifferent page group.

In operation 704, it is determined whether a sweep count is zero. Thesweep count is a value which indicates a number of background healthcheck sweeps that have occurred for particular data, typically aparticular block stripe. When the sweep count is zero, method 700continues to operation 706; otherwise, when the sweep count is greaterthan zero, method 700 continues to operation 710.

In operation 706, a TVS_(BASE) value is calibrated by perturbing theread TVS value with ±ε. Any method to perturb the TVS value may be used,and any number of iterations may be performed before determining acalibrated TVS_(BASE) value.

In operation 708, a TVS_(Δ) value is reset back to a nominal startingvalue, such as zero.

In operation 710, the TVS_(Δ) value is calibrated by perturbing the readTVS value with ±ε. Any method to perturb the TVS value may be used, andany number of iterations may be performed before determining acalibrated TVS_(Δ) value.

In operation 712, a PE_(LC) is reset to a nominal starting value, suchas zero.

In operation 714, the updated TVS values (TVS_(BASE) and TVS_(Δ)) andthe PE_(LC) are stored in the Flash controller memory.

In another embodiment, a block may be marked for later recalibrationwhen PE_(LC) exceeds a certain predetermined threshold. In yet anotherembodiment, the number of calibrations may be reduced further bypostponing calibration when the PE count or PE_(LC) is lower thancertain predetermined thresholds.

With reference to FIG. 8, a method 800 is shown for calibrating a pagegroup according to another embodiment. In operation 802, current TVSvalue(s) are read in the Flash controller memory. Any number of TVSvalues may be read, when more than one is stored, with each TVS valuepossibly having a different function and/or association with a differentpage group.

In operation 804, it is determined whether a read count is high. Theread count may be determined to be high based on a comparison to normalread counts, average read counts, some threshold read count, etc. Whenthe read count is high, method 800 continues to operation 808;otherwise, method 800 continues to operation 806.

In operation 806, it is determined whether a sweep count is zero. Thesweep count is a value which indicates a number of background healthcheck sweeps that have occurred for particular data, typically aparticular block stripe. When the sweep count is zero, method 800continues to operation 810; otherwise, when the sweep count is greaterthan zero, method 800 continues to operation 814.

In operation 808, it is determined whether the sweep count is zero andthe PE_(LC) is greater than or equal to some threshold (e.g., 500 asshown in FIG. 8). When the sweep count is zero and the PE_(LC) isgreater than or equal to the threshold, method 800 continues tooperation 816; otherwise, method 800 continues to operation 814.

In operation 810, a TVS_(BASE) value is calibrated by perturbing theread TVS value with ±ε. Any method to perturb the TVS value may be used,and any number of iterations may be performed before determining acalibrated TVS_(BASE) value. Method 800 then continues to operation 812.

In operation 812, a TVS_(Δ) value is reset back to a nominal startingvalue, such as zero. Method 800 then continues to operation 818 as isdescribed below.

In operation 814, a TVS_(Δ) value is calibrated by perturbing the readTVS value with ±ε. Any method to perturb the TVS value may be used, andany number of iterations may be performed before determining acalibrated TVS_(Δ) value. Method 800 then continues to operation 818.

In operation 816, both the TVS_(BASE) value and the TVS_(Δ) value arecalibrated by perturbing the read TVS value with ±ε. Any method toperturb the TVS value may be used, and any number of iterations may beperformed before determining a calibrated TVS_(BASE) value and TVS_(Δ)value. Method 800 then continues to operation 818.

In operation 818, a PE_(LC) is reset to a nominal starting value, suchas zero.

In operation 820, the updated TVS values (TVS_(BASE) and TVS_(Δ)) andthe PE_(LC) are stored in the Flash controller memory.

With reference to FIG. 9, a method 900 is shown for calibrating a pagegroup according to yet another embodiment. In operation 902, current TVSvalue(s) are read in the Flash controller memory. Any number of TVSvalues may be read, when more than one is stored, with each TVS valuepossibly having a different function and/or association with a differentpage group.

In operation 904, it is determined whether a read count is high. Theread count may be determined to be high based on a comparison to normalread counts, average read counts, some threshold read count, etc. Whenthe read count is high, method 900 continues to operation 908;otherwise, method 900 continues to operation 906.

In operation 906, it is determined whether a sweep count is zero. Thesweep count is a value which indicates a number of background healthcheck sweeps that have occurred for particular data, typically aparticular block stripe. When the sweep count is zero, method 900continues to operation 910; otherwise, when the sweep count is greaterthan zero, method 900 continues to operation 914.

In operation 908, it is determined whether the sweep count is zero andthe PE_(LC) is greater than or equal to some threshold (500 as shown inFIG. 9, but any positive number may be used). When the sweep count iszero and the PE_(LC) is greater than or equal to the threshold, method900 continues to operation 916; otherwise, method 900 continues tooperation 914.

In operation 910, a TVS_(BASE) value is calibrated by perturbing theread TVS value with ±ε. Any method to perturb the TVS value may be used,and any number of iterations may be performed before determining acalibrated TVS_(BASE) value. Method 900 then continues to operation 912.

In operation 912, a TVS_(Δ) value is reset back to a nominal startingvalue, such as zero. Method 900 then continues to operation 918.

In operation 914, a TVS_(Δ) value is calibrated by perturbing the readTVS value with ±ε. Any method to perturb the TVS value may be used, andany number of iterations may be performed before determining acalibrated TVS_(Δ) value. Method 900 then continues to operation 918.

In operation 916, the block is marked (such as with a flag bit or someother indicator) to calibrate at a later time and the method continuesto operation 914.

In operation 918, a PE_(LC) is reset to a nominal starting value, suchas zero. Method 900 then continues to operation 920.

In operation 920, the updated TVS values (TVS_(BASE) and TVS_(Δ)) andthe PE_(LC) are stored in the Flash controller memory and method 900ends.

Pseudo-code, in one exemplary embodiment, is presented below toillustrate how the split level shifting may be implemented. Alterations,additions, subtractions, and modifications to this pseudo-code foractual implementation and/or to affect desired tweaks and changes to thefunctionality are possible, and are not excluded from the embodimentsdescribed herein, as would be apparent to one of skill in the art uponreading the present descriptions. In this pseudo-code, ΔBASE_(A/B/C) isthe TVS_(BASE), ΔTEMP_(A/B/C) is the TVS_(Δ), SWP(blk) is the sweepcounter of the block which typically is maintained as a single sweepcount value in the block stripe for all blocks in this block stripe,baseMap( ) and tempMap( ) are the delta-voltage mappings, grpWL(numGrps)is the word line grouping,

INPUTS: ΔBASE_(A/B/C) (numBlks,numGrps), ΔTEMP_(A/B/C)(numBlks,numGrps), SWP(blk) OUTPUTS: ΔBASE_(A/B/C) (numBlks,numGrps),ΔTEMP_(A/B/C) (numBlks,numGrps) PARAM: baseMap(16), tempMap(8),grpWL(numGrps) FOR blk=1:numBlks  FOR grp=1:numGrps   % Generatecandidate read voltages   IF(SWP(blk)>0)    ΔCAND_(A/B/C) =(ΔBASE_(A/B/C)(blk,grp)+[−1 0 +1], ΔTEMP_(A/B/C)(blk,grp)  )   ELSE   ΔCAND_(A/B/C) = (ΔBASE_(A/B/C)(blk,grp)  , ΔTEMP_(A/B/C)(blk,grp)+[−10 +1])   END   % Count number of A/B/C errors for each candidate forevery WL in group   FOR k = 1:3    FOR wl = grpWL(grp)     % Computevoltage shifts using delta-voltage mapping    useShift_(A/B/C)=baseMap(ΔCAND_(A/B/C)(k,1))+tempMap(ΔCAND_(A/B/C)(k,2))    % Read, decode and count number of A/B/C errors    numErr_(A/B/C)(k,wl) = Read-Decode-Compare(blk, wl,useShift_(A/B/C))    END    % Maximum number of errors for thiscandidate (from all WL in group)    errWorst_(A/B/C)(k) =max(numErr_(A/B/C)(k,:))   END   % Choose best candidate for this group  [minWorst_(A/B/C) minInd_(A/B/C)] = min(errWorst_(A/B/C))   % Updatemeta-data tables   ΔBASE_(A/B/C)(blk,grp) =ΔCAND_(A/B/C)(minInd_(A/B/C),1)   ΔTEMP_(A/B/C)(blk,grp) =ΔCAND_(A/B/C)(minInd_(A/B/C),2)  END END

According to testing performed using the split shift values describedherein in various embodiments, endurance and data retention with respectto the RBER was significantly improved, particularly after extensivecycling of a Flash memory block and after prolonged data retention.Also, tracking is resilient to read disturbs (even those that may occurbetween background health check cycles), and the read disturb does nothave a dramatic effect on optimal levels.

In one embodiment, an apparatus (such as a storage controller) maycomprise and/or have access to a Flash memory block and a processor andlogic integrated with and/or executable by the processor. The logic maybe configured to perform the following steps in the background: read thecurrent TVS_(BASE) and/or TVS_(Δ) values from the Flash controllermemory, determine, after an initial writing of data to the Flash memoryblock, a TVS_(BASE) value configured to track permanent changes in anunderlying threshold voltage distributions due to cycling of the Flashmemory block, determine, after the initial writing of data to the Flashmemory block, a TVS_(Δ) value configured to track temporary changes,with respect the underlying threshold voltage distribution changes dueto retention and/or read disturb errors, store the TVS_(BASE) value andthe TVS_(Δ) value to the Flash controller memory, and calculate anoverall threshold voltage shift value for the Flash memory block whichequals a sum of the TVS_(BASE) value and the TVS_(Δ) value to be usedwhen writing data to the Flash memory block.

Now referring to FIG. 10, a method 1000 is shown according to oneembodiment. The method 1000 may be performed in accordance with thepresent invention in any of the environments depicted in FIGS. 1-9,among others, in various embodiments. Of course, more or less operationsthan those specifically described in FIG. 10 may be included in method1000, as would be understood by one of skill in the art upon reading thepresent descriptions.

Each of the steps of the method 1000 may be performed by any suitablecomponent of the operating environment. For example, in variousembodiments, the method 1000 may be partially or entirely performed by aprocessor (such as a CPU, an ASIC, an FPGA, etc.), a module, a functionblock, a switch, a router, etc., in various approaches.

As shown in FIG. 10, method 1000 may initiate with operation 1002,where, after writing data to a Flash memory block, one or moreTVS_(BASE) values are determined. Each TVS_(BASE) value is configured totrack permanent changes in underlying threshold voltage distributionsdue to cycling of the Flash memory block.

In operation 1004, after the writing of data to the Flash memory block,one or more TVS_(Δ) values are determined. Each TVS_(Δ) value isconfigured to track temporary changes with respect to changes in theunderlying threshold voltage distributions due to retention and/or readdisturb errors.

In optional operation 1006, the TVS_(BASE) value, the TVS_(Δ) value, andthe PE_(LC) are stored, such as to a Flash controller memory or someother suitable memory of a type known in the art connected to a Flashcontroller.

In operation 1008, an overall threshold voltage shift (TVS) value fordata written to the Flash memory block is calculated. In thisembodiment, the overall TVS value may be a function of the TVS_(BASE)value and the TVS_(Δ) value, and the overall TVS value may be used whenwriting data to the Flash memory block. In one embodiment, the overallTVS value may equal a sum of the TVS_(BASE) value and the TVS_(Δ) value.

In operation 1010, the overall TVS value is applied to a read operationof the data stored to the Flash memory block upon receiving a readrequest for such data.

In one approach, method 1000 may further include resetting the TVS_(Δ)value when the Flash memory block is erased. Furthermore, both theTVS_(BASE) value and the TVS_(Δ) value may be reset and re-determinedduring a background health check after a predetermined number ofbackground health checks without calibration are performed. In oneembodiment, the predetermined number of background health checks withoutcalibration may be from 0 to 5, such as 2.

In a further embodiment, a block may be marked for later re-calibrationwhen a program/erase (P/E) cycle count exceeds a predeterminedthreshold. The predetermined threshold for the P/E cycle count may be500, or more or less, in some approaches. In yet another embodiment, thenumber of calibrations may be reduced further by postponing calibrationwhen the PE count or PE_(LC) is lower than certain predeterminedthresholds.

In this embodiment, the TVS_(BASE) value and the TVS_(Δ) value may bedetermined without interrupting normal operations directed at the Flashmemory block, normal operations including writing and/or reading of datato/from the Flash memory block.

Method 1000 may also include grouping together physical Flash pageswhich have similar TVS_(BASE) and TVS_(Δ) values into a page group, inorder to reduce storage needs and in order to apply changes to theTVS_(BASE) and TVS_(Δ) values across all members of the group with lessoverhead.

In this approach, the TVS_(BASE) value may be stored using from 3 to 7bit-length values, the TVS_(Δ) value may be stored using from 2 to 6bit-length values, and the TVS_(BASE) and TVS_(Δ) values may be trackedper page group using from 5 to 11 bit-length values. Of course, more orless bits may be used for storing the TVS values, as would beappreciated by one of skill in the art upon reading the presentdescriptions.

Furthermore, a mapping may be created that correlates the TVS_(BASE) andTVS_(Δ) values as tracked per page group to actual read voltage shiftvalues. In this way, the voltage applied to the Flash memory block inorder to read and/or write may be calculated, as the TVS values arestored as simple short bit strings and do not actually have a voltagenumber stored. To get the voltage shift appropriate for a specific TVSvalue, the mapping may be consulted.

The present invention may be a system, a method, and/or a computerprogram product. The computer program product may include a computerreadable storage medium (or media) having computer readable programinstructions thereon for causing a processor to carry out aspects of thepresent invention.

The computer readable storage medium can be a tangible device that canretain and store instructions for use by an instruction executiondevice. The computer readable storage medium may be, for example, but isnot limited to, an electronic storage device, a magnetic storage device,an optical storage device, an electromagnetic storage device, asemiconductor storage device, or any suitable combination of theforegoing. A non-exhaustive list of more specific examples of thecomputer readable storage medium includes the following: a portablecomputer diskette, a hard disk, a random access memory (RAM), aread-only memory (ROM), an erasable programmable read-only memory (EPROMor Flash memory), a static random access memory (SRAM), a portablecompact disc read-only memory (CD-ROM), a digital versatile disk (DVD),a memory stick, a floppy disk, a mechanically encoded device such aspunch-cards or raised structures in a groove having instructionsrecorded thereon, and any suitable combination of the foregoing. Acomputer readable storage medium, as used herein, is not to be construedas being transitory signals per se, such as radio waves or other freelypropagating electromagnetic waves, electromagnetic waves propagatingthrough a waveguide or other transmission media (e.g., light pulsespassing through a fiber-optic cable), or electrical signals transmittedthrough a wire.

Computer readable program instructions described herein can bedownloaded to respective computing/processing devices from a computerreadable storage medium or to an external computer or external storagedevice via a network, for example, the Internet, a local area network, awide area network and/or a wireless network. The network may comprisecopper transmission cables, optical transmission fibers, wirelesstransmission, routers, firewalls, switches, gateway computers and/oredge servers. A network adapter card or network interface in eachcomputing/processing device receives computer readable programinstructions from the network and forwards the computer readable programinstructions for storage in a computer readable storage medium withinthe respective computing/processing device.

Computer readable program instructions for carrying out operations ofthe present invention may be assembler instructions,instruction-set-architecture (ISA) instructions, machine instructions,machine dependent instructions, microcode, firmware instructions,state-setting data, or either source code or object code written in anycombination of one or more programming languages, including an objectoriented programming language such as Smalltalk, C++ or the like, andconventional procedural programming languages, such as the “C”programming language or similar programming languages. The computerreadable program instructions may execute entirely on the user'scomputer, partly on the user's computer, as a stand-alone softwarepackage, partly on the user's computer and partly on a remote computeror entirely on the remote computer or server. In the latter scenario,the remote computer may be connected to the user's computer through anytype of network, including a local area network (LAN) or a wide areanetwork (WAN), or the connection may be made to an external computer(for example, through the Internet using an Internet Service Provider).In some embodiments, electronic circuitry including, for example,programmable logic circuitry, field-programmable gate arrays (FPGA), orprogrammable logic arrays (PLA) may execute the computer readableprogram instructions by utilizing state information of the computerreadable program instructions to personalize the electronic circuitry,in order to perform aspects of the present invention.

Aspects of the present invention are described herein with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems), and computer program products according to embodiments of theinvention. It will be understood that each block of the flowchartillustrations and/or block diagrams, and combinations of blocks in theflowchart illustrations and/or block diagrams, can be implemented bycomputer readable program instructions.

These computer readable program instructions may be provided to aprocessor of a general purpose computer, special purpose computer, orother programmable data processing apparatus to produce a machine, suchthat the instructions, which execute via the processor of the computeror other programmable data processing apparatus, create means forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks. These computer readable program instructionsmay also be stored in a computer readable storage medium that can directa computer, a programmable data processing apparatus, and/or otherdevices to function in a particular manner, such that the computerreadable storage medium having instructions stored therein comprises anarticle of manufacture including instructions which implement aspects ofthe function/act specified in the flowchart and/or block diagram blockor blocks.

The computer readable program instructions may also be loaded onto acomputer, other programmable data processing apparatus, or other deviceto cause a series of operational steps to be performed on the computer,other programmable apparatus or other device to produce a computerimplemented process, such that the instructions which execute on thecomputer, other programmable apparatus, or other device implement thefunctions/acts specified in the flowchart and/or block diagram block orblocks.

The flowchart and block diagrams in the Figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods, and computer program products according to variousembodiments of the present invention. In this regard, each block in theflowchart or block diagrams may represent a module, segment, or portionof instructions, which comprises one or more executable instructions forimplementing the specified logical function(s). In some alternativeimplementations, the functions noted in the block may occur out of theorder noted in the figures. For example, two blocks shown in successionmay, in fact, be executed substantially concurrently, or the blocks maysometimes be executed in the reverse order, depending upon thefunctionality involved. It will also be noted that each block of theblock diagrams and/or flowchart illustration, and combinations of blocksin the block diagrams and/or flowchart illustration, can be implementedby special purpose hardware-based systems that perform the specifiedfunctions or acts or carry out combinations of special purpose hardwareand computer instructions.

Moreover, a system according to various embodiments may include aprocessor and logic integrated with and/or executable by the processor,the logic being configured to perform one or more of the process stepsrecited herein. By integrated with, what is meant is that the processorhas logic embedded therewith as hardware logic, such as an ASIC, a FPGA,etc. By executable by the processor, what is meant is that the logic ishardware logic; software logic such as firmware, part of an operatingsystem, part of an application program; etc., or some combination ofhardware and software logic that is accessible by the processor andconfigured to cause the processor to perform some functionality uponexecution by the processor. Software logic may be stored on local and/orremote memory of any memory type, as known in the art. Any processorknown in the art may be used, such as a software processor module and/ora hardware processor such as an ASIC, a FPGA, a CPU, an integratedcircuit (IC), a graphics processing unit (GPU), etc.

It will be clear that the various features of the foregoing systemsand/or methodologies may be combined in any way, creating a plurality ofcombinations from the descriptions presented above.

It will be further appreciated that embodiments of the present inventionmay be provided in the form of a service deployed on behalf of acustomer to offer service on demand.

While various embodiments have been described above, it should beunderstood that they have been presented by way of example only, and notlimitation. Thus, the breadth and scope of an embodiment of the presentinvention should not be limited by any of the above-described exemplaryembodiments, but should be defined only in accordance with the followingclaims and their equivalents.

What is claimed is:
 1. A computer program product, the computer programproduct comprising a computer readable storage medium having programinstructions embodied therewith, wherein the computer readable storagemedium is not a transitory signal per se, the program instructionsexecutable by a processing circuit to cause the processing circuit toperform a method comprising: determining, by the processing circuit,after writing data to a non-volatile memory block, one or more deltathreshold voltage shift (TVS_(Δ)) values configured to track temporarychanges with respect to changes in the underlying threshold voltagedistributions due to retention and/or read disturb errors; calculating,by the processing circuit, one or more overall threshold voltage shiftvalues for the data written to the non-volatile memory block, the one ormore overall threshold voltage shift values being a function of the oneor more TVS_(Δ) values to be used when writing data to the non-volatilememory block; and storing, by the processing circuit, the one or moreoverall threshold voltage shift values; and re-calibrating, by theprocessing circuit, a base threshold voltage shift (TVS_(BASE)) value,the one or more TVS_(Δ) values, or both the base threshold voltage shift(TVS_(BASE)) value and the one or more TVS_(Δ) values, during abackground health check after a predetermined number of backgroundhealth checks without calibration are performed.
 2. The computer programproduct as recited in claim 1, comprising program instructionsexecutable by the processing circuit to cause the processing circuit toreset the one or more TVS_(Δ) values when the non-volatile memory blockis erased.
 3. The computer program product as recited in claim 1,comprising program instructions executable by the processing circuit tocause the processing circuit to apply the one or more overall thresholdvoltage shift values to a read operation of the data stored to thenon-volatile memory block upon receiving a read request.
 4. The computerprogram product as recited in claim 1, comprising program instructionsexecutable by the processing circuit to cause the processing circuit to:read one or more TVS values from a non-volatile controller memory; reseta program/erase cycle count since last calibration after calibrating theone or more overall threshold voltage shift values; and store the one ormore TVS_(Δ) values, and the program/erase cycle count since lastcalibration to the non-volatile controller memory.
 5. The computerprogram product as recited in claim 1, wherein each overall thresholdvoltage shift value equals a sum of a corresponding base thresholdvoltage shift (TVS_(BASE)) value and a corresponding TVS_(Δ) value, theTVS_(BASE) value configured to track permanent changes in underlyingthreshold voltage distributions due to cycling of the non-volatilememory block.
 6. The computer program product as recited in claim 1,wherein the predetermined number of background health checks withoutcalibration is from 1 to
 5. 7. The computer program product as recitedin claim 6, wherein a block is marked for re-calibration when aprogram/erase cycle count since last calibration exceeds a predeterminedthreshold, wherein blocks marked for re-calibration are forced to becalibrated in a read sweep background health check, and wherein theblocks are unmarked after re-calibration is completed.
 8. The computerprogram product as recited in claim 6, wherein the re-calibration is notperformed when a program/erase cycle count is lower than a predeterminedthreshold.
 9. The computer program product as recited in claim 1,wherein the one or more TVS_(Δ) values are determined periodically inthe background without interrupting normal operations directed at thenon-volatile memory block.
 10. The computer program product as recitedin claim 1, comprising program instructions executable by the processingcircuit to cause the processing circuit to group together physicalnon-volatile pages which have similar TVS_(Δ) values into a page group.11. A computer program product, the computer program product comprisinga computer readable storage medium having program instructions embodiedtherewith, wherein the computer readable storage medium is not atransitory signal per se, the program instructions executable by aprocessing circuit to cause the processing circuit to perform a methodcomprising: determining, by the processing circuit, after writing datato a non-volatile memory block, one or more base threshold voltage shift(TVS_(BASE)) values configured to track permanent changes in underlyingthreshold voltage distributions due to cycling of the non-volatilememory block; calculating, by the processing circuit, an overallthreshold voltage shift value for the data written to the non-volatilememory block, the overall threshold voltage shift value being a functionof the one or more TVS_(BASE) values; and storing, by the processingcircuit, the overall threshold voltage shift value.
 12. The computerprogram product as recited in claim 11, comprising program instructionsexecutable by the processing circuit to cause the processing circuit toreset the one or more TVS_(Δ) values when the non-volatile memory blockis erased.
 13. The computer program product as recited in claim 11,comprising program instructions executable by the processing circuit tocause the processing circuit to determine, by the processing circuitafter the writing of data to the non-volatile memory block, one or moredelta threshold voltage shift (TVS_(Δ)) values configured to tracktemporary changes, with respect to changes in the underlying thresholdvoltage distributions due to retention and/or read disturb errors. 14.The computer program product as recited in claim 11, comprising programinstructions executable by the processing circuit to cause theprocessing circuit to apply the overall threshold voltage shift value toa read operation of the data stored to the non-volatile memory blockupon receiving a read request.
 15. The computer program product asrecited in claim 11, comprising program instructions executable by theprocessing circuit to cause the processing circuit to: read one or moreTVS values from a non-volatile controller memory; reset a program/erasecycle count since last calibration after calibrating the overallthreshold voltage shift value; and store the one or more TVS_(BASE)values and the program/erase cycle count since last calibration to thenon-volatile controller memory.
 16. The computer program product asrecited in claim 11, comprising program instructions executable by theprocessing circuit to cause the processing circuit to re-calibrate theone or more TVS_(BASE) values during a background health check after apredetermined number of background health checks without calibration areperformed, wherein the predetermined number of background health checkswithout calibration is from 1 to
 5. 17. The computer program product asrecited in claim 11, wherein at least one of the one or more TVS_(BASE)values and the one or more TVS_(Δ) values are determined periodically inthe background without interrupting normal operations directed at thenon-volatile memory block.
 18. The computer program product as recitedin claim 11, comprising program instructions executable by theprocessing circuit to cause the processing circuit to: group togetherphysical non-volatile pages which have similar TVS_(BASE) and TVS_(Δ)values into a page group; and create a mapping that correlates theTVS_(BASE) values as tracked per page group to actual read voltage shiftvalues.
 19. A computer-implemented method for managing threshold voltageshifts in non-volatile memory, the method comprising: calculating anoverall threshold voltage shift value for data written to a non-volatilememory block, the overall threshold voltage shift value being a functionof a base threshold voltage shift (TVS_(BASE)) value and delta thresholdvoltage shift (TVS_(Δ)) value to be used when writing data to thenon-volatile memory block, the TVSBASE value representing a permanentchange in underlying threshold voltage distributions due to cycling ofthe non-volatile memory block, the TVS_(Δ) value representing atemporary change with respect to a change in the underlying thresholdvoltage distributions due to retention and/or read disturb errors; andapplying the overall threshold voltage shift value to a read operationof the data stored to the non-volatile memory block upon receiving aread request.
 20. The computer-implemented method as recited in claim19, comprising re-calibrating the one or more TVS_(BASE) values during abackground health check after a predetermined number of backgroundhealth checks without calibration are performed, wherein thepredetermined number of background health checks without calibration isfrom 1 to 5.